package com.learning.spring.aop.aspectj.pointcut.expression.function;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

/**
 * ClassName: ProxyPointcutFunction
 * Description: 代理类切点函数：this
 * Date: 2020/10/15 10:25 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
@Aspect
public class ProxyPointcutFunction {

    /**
     * 函数 this：针对生成的代理对象的类，考虑目标类生成的代理对象的类型
     * <p>
     * 通过判断代理对象的类是否按类型匹配指定类来决定是否和切点匹配
     * <p>
     * this(com.learning.spring.aop.aspectj.AopServiceImpl) 不会匹配任何方法。
     * 如果不使用CGLib，生成的代理对象属于 AopService 类型。AopService类型不属于 AopServiceImpl。
     */
    @Before("this(com.learning.spring.aop.aspectj.pointcut.expression.service.impl.AopServiceImpl)")
    public void thisProxy() {
        System.out.println("Hello this Function");
    }
}
